package com.kevin.Code.DP;

/**
 * @author Vinlee Xiao
 * @Classname BestTimetoBuyandSellStockv
 * @Description Leetcode 714  买卖股票的最佳时机含手续费 中等难度
 * @Date 2021/10/11 21:21
 * @Version 1.0
 */
public class BestTimetoBuyandSellStockv {

    /**
     * @param prices
     * @param fee
     * @return
     */
    public int maxProfit(int[] prices, int fee) {

        int len = prices.length;

        //两种状态
        //表示i天结束之后持有的股票
        int[][] dp = new int[len][2];
        //第i天持有股票
        dp[0][0] = 0;
        //第0次持有股票
        dp[0][1] = -prices[0];


        for (int i = 1; i < len; i++) {


            //当天结束之后没有持有股票 1.前一天卖出了股票 2.前一天结束之后没有持有股票
            dp[i][0] = Math.max(dp[i - 1][1] + prices[1] - fee, dp[i - 1][0]);


            //持有股票 两种状态 1.当天买的，前一天就持有股票
            dp[i][1] = Math.max(dp[i - 1][0] - prices[i], dp[i - 1][1]);

        }

        return dp[len - 1][0];
    }
}
